home *** CD-ROM | disk | FTP | other *** search
-
- EXECVE(2) UNIX Programmer's Manual EXECVE(2)
-
- NNAAMMEE
- eexxeeccvvee - execute a file
-
- SSYYNNOOPPSSIISS
- ##iinncclluuddee <<uunniissttdd..hh>>
-
- _i_n_t
- eexxeeccvvee(_c_o_n_s_t _c_h_a_r _*_p_a_t_h, _c_h_a_r _*_c_o_n_s_t _a_r_g_v_[_], _c_h_a_r _*_c_o_n_s_t _e_n_v_p_[_])
-
- DDEESSCCRRIIPPTTIIOONN
- EExxeeccvvee() transforms the calling process into a new process. The new pro-
- cess is constructed from an ordinary file, whose name is pointed to by
- _p_a_t_h, called the _n_e_w _p_r_o_c_e_s_s _f_i_l_e. This file is either an executable ob-
- ject file, or a file of data for an interpreter. An executable object
- file consists of an identifying header, followed by pages of data repre-
- senting the initial program (text) and initialized data pages. Addition-
- al pages may be specified by the header to be initialized with zero data;
- see a.out(5).
-
- An interpreter file begins with a line of the form:
-
- ##!! _i_n_t_e_r_p_r_e_t_e_r [_a_r_g]
-
- When an interpreter file is eexxeeccvvee()'d, the system eexxeeccvvee()'s runs the
- specified _i_n_t_e_r_p_r_e_t_e_r. If the optional _a_r_g is specified, it becomes the
- first argument to the _i_n_t_e_r_p_r_e_t_e_r, and the name of the originally
- eexxeeccvvee()'d file becomes the second argument; otherwise, the name of the
- originally eexxeeccvvee()'d file becomes the first argument. The original ar-
- guments are shifted over to become the subsequent arguments. The zeroth
- argument, normally the name of the eexxeeccvvee()'d file, is left unchanged.
-
- The argument _a_r_g_v is a pointer to a null-terminated array of character
- pointers to null-terminated character strings. These strings construct
- the argument list to be made available to the new process. At least one
- argument must be present in the array; by custom, the first element
- should be the name of the executed program (for example, the last compo-
- nent of _p_a_t_h).
-
- The argument _e_n_v_p is also a pointer to a null-terminated array of charac-
- ter pointers to null-terminated strings. A pointer to this array is nor-
- mally stored in the global variable _e_n_v_i_r_o_n_. These strings pass informa-
- tion to the new process that is not directly an argument to the command
- (see environ(7)).
-
- File descriptors open in the calling process image remain open in the new
- process image, except for those for which the close-on-exec flag is set
- (see close(2) and fcntl(2)). Descriptors that remain open are unaffected
- by eexxeeccvvee().
-
- Signals set to be ignored in the calling process are set to be ignored in
- the new process. Signals which are set to be caught in the calling pro-
- cess image are set to default action in the new process image. Blocked
- signals remain blocked regardless of changes to the signal action. The
- signal stack is reset to be undefined (see sigaction(2) for more informa-
- tion).
-
- If the set-user-ID mode bit of the new process image file is set (see
- chmod(2)), the effective user ID of the new process image is set to the
- owner ID of the new process image file. If the set-group-ID mode bit of
- the new process image file is set, the effective group ID of the new pro-
- cess image is set to the group ID of the new process image file. (The
- effective group ID is the first element of the group list.) The real us-
- er ID, real group ID and other group IDs of the new process image remain
- the same as the calling process image. After any set-user-ID and set-
- group-ID processing, the effective user ID is recorded as the saved set-
- user-ID, and the effective group ID is recorded as the saved set-group-
- ID. These values may be used in changing the effective IDs later (see
- setuid(2)).
-
- The new process also inherits the following attributes from the calling
- process:
-
- process ID see getpid(2)
- parent process ID see getppid(2)
- process group ID see getpgrp(2)
- access groups see getgroups(2)
- working directory see chdir(2)
- root directory see chroot(2)
- control terminal see termios(4)
- resource usages see getrusage(2)
- interval timers see getitimer(2)
- resource limits see getrlimit(2)
- file mode mask see umask(2)
- signal mask see sigaction(2), sigsetmask(2)
-
- When a program is executed as a result of an eexxeeccvvee() call, it is entered
- as follows:
-
- main(argc, argv, envp)
- int argc;
- char **argv, **envp;
-
- where _a_r_g_c is the number of elements in _a_r_g_v (the ``arg count'') and _a_r_g_v
- points to the array of character pointers to the arguments themselves.
-
- RREETTUURRNN VVAALLUUEESS
- As the eexxeeccvvee() function overlays the current process image with a new
- process image the successful call has no process to return to. If
- eexxeeccvvee() does return to the calling process an error has occurred; the
- return value will be -1 and the global variable _e_r_r_n_o is set to indicate
- the error.
-
- EERRRROORRSS
- EExxeeccvvee() will fail and return to the calling process if:
-
- [ENOTDIR] A component of the path prefix is not a directory.
-
- [ENAMETOOLONG]
- A component of a pathname exceeded {NAME_MAX} characters,
- or an entire path name exceeded {PATH_MAX} characters.
-
- [ENOENT] The new process file does not exist.
-
- [ELOOP] Too many symbolic links were encountered in translating the
- pathname.
-
- [EACCES] Search permission is denied for a component of the path
- prefix.
-
- [EACCES] The new process file is not an ordinary file.
-
- [EACCES] The new process file mode denies execute permission.
-
- [EACCES] The new process file is on a filesystem mounted with execu-
- tion disabled (MNT_NOEXEC in <_s_y_s_/_m_o_u_n_t_._h>).
-
- [ENOEXEC] The new process file has the appropriate access permission,
-
- but has an invalid magic number in its header.
-
- [ETXTBSY] The new process file is a pure procedure (shared text) file
- that is currently open for writing or reading by some pro-
- cess.
-
- [ENOMEM] The new process requires more virtual memory than is al-
- lowed by the imposed maximum (getrlimit(2)).
-
- [E2BIG] The number of bytes in the new process's argument list is
- larger than the system-imposed limit. The limit in the
- system as released is 20480 bytes (NCARGS in
- <_s_y_s_/_p_a_r_a_m_._h>).
-
- [EFAULT] The new process file is not as long as indicated by the
- size values in its header.
-
- [EFAULT] _P_a_t_h, _a_r_g_v, or _e_n_v_p point to an illegal address.
-
- [EIO] An I/O error occurred while reading from the file system.
-
- CCAAVVEEAATT
- If a program is _s_e_t_u_i_d to a non-super-user, but is executed when the real
- _u_i_d is ``root'', then the program has some of the powers of a super-user
- as well.
-
- SSEEEE AALLSSOO
- exit(2), fork(2), execl(3), environ(7)
-
- HHIISSTTOORRYY
- The eexxeeccvvee() function call appeared in 4.2BSD.
-
- 4th Berkeley Distribution January 24, 1994 3
-